package edu.vsu.amm.chaos.api;

import java.util.Arrays;

/**
 * User: Илья
 * Date: 10.11.13
 * Time: 17:09
 */
public class Henon {

	private double a;
	private double b;
	private double[] current;
	private int iteration;

	/**
	 *
	 * @param a Коэффициент отображения.
	 * @param b Коэффициент отображения.
	 * @param initial Начальная точка (x0, y0).
	 */
	public Henon(double a, double b, double[] initial) {
		if (initial == null || initial.length < 2) {
			throw new RuntimeException("Некорректная начальная точка");
		}

		this.a = a;
		this.b = b;
		this.current = Arrays.copyOf(initial, 2);
	}

	/**
	 * @return Следующую точку из последовательности f^(n)(X)
	 * Первые две компоненты - координаты (xN, yN); третья компонента - номер N итерации.
	 * Начальная точка соответствует нулевой итерации.
	 */
	public double[] next() {
		double x = 1 + current[1] - a * current[0] * current[0];
		double y = b * current[0];
		current[0] = x;
		current[1] = y;

		return new double[] { x, y, ++iteration};
	}
}
